在 Day13 - 可觀測性信號 Observability Signals 中提到常見的三個信號分別是 Metrics、Log 與 Trace,應用程式的性能分析 Profiling 也是在追查問題的 root cause 重點項目之一,Grafana Cloud 提供解決方案名為 Grafana Pyrscope。是由 Plare 與 Pyrscope 兩個開源專案合併而成,目的是為了提供開源社群大規模的分析線上應用程式資訊,以了解程式碼在上線之後資源的使用狀況,幫助開發人員在問題定位或是效能優化。
在官網有提供分析步驟,說明如下
如何在正式環境找到應用程式的性能瓶頸 ?
這一直是個複雜的任務,需要了解不同的應用程式組件像是前端、後端、資料庫或外取各自的瓶頸,才有機會制定其優化策略達到提高性能目的,在 .NET 應用程式優化部分以自己維運經驗可以透過 Debug Diagnostic 或是 WinDbg 來追查應用程式性能問題
Debug Diagnostic
WinDbg
以 Debug Diagnostic 為例,所需要步驟大概如下
但這些在問題處理上可能都是屬於落後指標,意味者在處理上可能會是問題發生後才有機會發現及後續處理,舉例來說發現 CPU 使用量飆高,團隊來建立規則達到特定 % 後,下一次發生時觸發其規則時自動 Dump 檔案,團隊取得檔案進行後續分析當下程式執行狀況。
透過即時與不斷的蒐集線上應用程式資訊,可以更有效的定位可能發生的問題並針對問題進行調整,也可縮短 MTTR(Mean time to recovery) 平均修復的時間。
在蒐集遙測數據方面,有兩種方式
在 Grafana Pyroscope 中有提供不同程式語言的範例,目前有以下幾種
補充 : Github supported lanagauges 有提到 PHP (phpspy)
自己對於 .NET 比較熟悉,接著使用該程式語言進行範例說明,如果是要將既有的 .NET 專案加入 Profiling 可以參考官方說明 : 連結
以下是直接使用範例程式進行步驟說明
產生 Pyrscope config
到 Grafana Stack 頁面,按下 Send Profiles
根據 Token Name 設定有效日期,Generate API Token
修改 API Token 設定
將剛剛產好的 User Name 與 API Token 複製到應用程式設定中的 PYROSCOPE_BASIC_AUTH_USER
與 PYROSCOPE_BASIC_AUTH_PASSWORD
執行應用程式
到 sample 專案底下 Fast-slow 目錄,執行下列語法
docker-compose up
透過以上方式即可在 Grafaca Cloud 看到應用程式 profiling 資訊。
另外在官網也有提供 Pyroscope Demo,有興趣可以看到更多資訊感受其強大威力。